/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/

KindEditor.plugin('emoticons', function(K) {
	var self = this, name = 'emoticons',
		path = (self.emoticonsPath || self.pluginsPath + 'emoticons/images/'),
		allowPreview = self.allowPreviewEmoticons === undefined ? true : self.allowPreviewEmoticons,
		currentPageNum = 1;
	self.clickToolbar(name, function() {
		var rows = 8, cols = 14, total = 104, startNum = 0,
			cells = rows * cols, pages = Math.ceil(total / cells),
			colsHalf = Math.floor(cols / 2),
			wrapperDiv = K('<div class="ke-plugin-emoticons"></div>'),
			elements = [],
			menu = self.createMenu({
				name : name,
				beforeRemove : function() {
					removeEvent();
				}
			});
		menu.div.append(wrapperDiv);
		var previewDiv, previewImg;
		if (allowPreview) {
			previewDiv = K('<div class="ke-preview"></div>').css('right', 0);
			previewImg = K('<img class="ke-preview-img" src="' + path + startNum + '.gif" />');
			wrapperDiv.append(previewDiv);
			previewDiv.append(previewImg);
		}
		function bindCellEvent(cell, j, num) {
			if (previewDiv) {
				cell.mouseover(function() {
					if (j > colsHalf) {
						previewDiv.css('left', 0);
						previewDiv.css('right', '');
					} else {
						previewDiv.css('left', '');
						previewDiv.css('right', 0);
					}
					previewImg.attr('src', path + num + '.gif');
					K(this).addClass('ke-on');
				});
			} else {
				cell.mouseover(function() {
					K(this).addClass('ke-on');
				});
			}
			cell.mouseout(function() {
				K(this).removeClass('ke-on');
			});
			

			cell.click(function(e) {
				//将表情改为微信的格式
				switch (num){
			　　   case 0:
			　　     num = '[微笑]';
			  　　   break
			　　   case 1:
			　　     num = '[撇嘴]';
			  　　   break
			　　   case 2:
			　　     num = '[色]';
			  　　   break
			　　   case 3:
			　　     num = '[发呆]';
			  　　   break
			　　   case 4:
			　　     num = '[得意]';
			  　　   break
			　　   case 5:
			　　     num = '[流泪]';
			  　　   break
			　　   case 6:
			　　     num = '[害羞]';
			  　　   break
			　　   case 7:
			　　     num = '[闭嘴]';
			  　　   break
			　　   case 8:
			　　     num = '[睡]';
			  　　   break
			　　   case 9:
			　　     num = '[大哭]';
			  　　   break
			　　   case 10:
			　　     num = '[尴尬]';
			  　　   break
			　　   case 11:
			　　     num = '[发怒]';
			  　　   break
			　　   case 12:
			　　     num = '[调皮]';
			  　　   break
			　　   case 13:
			　　     num = '[呲牙]';
			  　　   break
			　　   case 14:
			　　     num = '[惊讶]';
			  　　   break
			　　   case 15:
			　　     num = '[难过]';
			  　　   break
			　　   case 16:
			　　     num = '[酷]';
			  　　   break
			　　   case 17:
			　　     num = '[冷汗]';
			  　　   break
			　　   case 18:
			　　     num = '[抓狂]';
			  　　   break
			　　   case 19:
			　　     num = '[吐]';
			  　　   break
			　　   case 20:
			　　     num = '[偷笑]';
			  　　   break
			　　   case 21:
			　　     num = '[愉快]';
			  　　   break
			　　   case 22:
			　　     num = '[白眼]';
			  　　   break
			　　   case 23:
			　　     num = '[傲慢]';
			  　　   break
			　　   case 24:
			　　     num = '[饥饿]';
			  　　   break
			　　   case 25:
			　　     num = '[困]';
			  　　   break
			　　   case 26:
			　　     num = '[惊恐]';
			  　　   break
			　　   case 27:
			　　     num = '[流汗]';
			  　　   break
			　　   case 28:
			　　     num = '[憨笑]';
			  　　   break
			　　   case 29:
			　　     num = '[大兵]';
			  　　   break
			　　   case 30:
			　　     num = '[奋斗]';
			  　　   break
			　　   case 31:
			　　     num = '[咒骂]';
			  　　   break
			　　   case 32:
			　　     num = '[疑问]';
			  　　   break
			　　   case 33:
			　　     num = '[嘘]';
			  　　   break
			　　   case 34:
			　　     num = '[晕]';
			  　　   break
			　　   case 35:
			　　     num = '[折磨]';
			  　　   break
			　　   case 36:
			　　     num = '[衰]';
			  　　   break
			　　   case 37:
			　　     num = '[骷髅]';
			  　　   break
			　　   case 38:
			　　     num = '[敲打]';
			  　　   break
			　　   case 39:
			　　     num = '[再见]';
			  　　   break
			　　   case 40:
			　　     num = '[擦汗]';
			  　　   break
			　　   case 41:
			　　     num = '[抠鼻]';
			  　　   break
			　　   case 42:
			　　     num = '[鼓掌]';
			  　　   break
			　　   case 43:
			　　     num = '[糗大了]';
			  　　   break
			　　   case 44:
			　　     num = '[坏笑]';
			  　　   break
			　　   case 45:
			　　     num = '[左哼哼]';
			  　　   break
			　　   case 46:
			　　     num = '[右哼哼]';
			  　　   break
			　　   case 47:
			　　     num = '[哈欠]';
			  　　   break
			　　   case 48:
			　　     num = '[鄙视]';
			  　　   break
			　　   case 49:
			　　     num = '[委屈]';
			  　　   break
			　　   case 50:
			　　     num = '[快哭了]';
			  　　   break
			　　   case 51:
			　　     num = '[阴险]';
			  　　   break
			　　   case 52:
			　　     num = '[亲亲]';
			  　　   break
			　　   case 53:
			　　     num = '[吓]';
			  　　   break
			　　   case 54:
			　　     num = '[可怜]';
			  　　   break
			　　   case 55:
			　　     num = '[菜刀]';
			  　　   break
			　　   case 56:
			　　     num = '[西瓜]';
			  　　   break
			　　   case 57:
			　　     num = '[啤酒]';
			  　　   break
			　　   case 58:
			　　     num = '[篮球]';
			  　　   break
			　　   case 59:
			　　     num = '[乒乓]';
			  　　   break
			　　   case 60:
			　　     num = '[咖啡]';
			  　　   break
			　　   case 61:
			　　     num = '[饭]';
			  　　   break
			　　   case 62:
			　　     num = '[猪头]';
			  　　   break
			　　   case 63:
			　　     num = '[玫瑰]';
			  　　   break
			　　   case 64:
			　　     num = '[凋谢]';
			  　　   break
			　　   case 65:
			　　     num = '[示爱]';
			  　　   break
			　　   case 66:
			　　     num = '[爱心]';
			  　　   break
			　　   case 67:
			　　     num = '[心碎]';
			  　　   break
			　　   case 68:
			　　     num = '[蛋糕]';
			  　　   break
			　　   case 69:
			　　     num = '[闪电]';
			  　　   break
			　　   case 70:
			　　     num = '[炸弹]';
			  　　   break
			　　   case 71:
			　　     num = '[刀]';
			  　　   break
			　　   case 72:
			　　     num = '[足球]';
			  　　   break
			　　   case 73:
			　　     num = '[瓢虫]';
			  　　   break
			　　   case 74:
			　　     num = '[便便]';
			  　　   break
			　　   case 75:
			　　     num = '[月亮]';
			  　　   break
			　　   case 76:
			　　     num = '[太阳]';
			  　　   break
			　　   case 77:
			　　     num = '[礼物]';
			  　　   break
			　　   case 78:
			　　     num = '[拥抱]';
			  　　   break
			　　   case 79:
			　　     num = '[强]';
			  　　   break
			　　   case 80:
			　　     num = '[弱]';
			  　　   break
			　　   case 81:
			　　     num = '[握手]';
			  　　   break
			　　   case 82:
			　　     num = '[胜利]';
			  　　   break
			　　   case 83:
			　　     num = '[抱拳]';
			  　　   break
			　　   case 84:
			　　     num = '[勾引]';
			  　　   break
			　　   case 85:
			　　     num = '[拳头]';
			  　　   break
			　　   case 86:
			　　     num = '[差劲]';
			  　　   break
			　　   case 87:
			　　     num = '[爱你]';
			  　　   break
			　　   case 88:
			　　     num = '[NO]';
			  　　   break
			　　   case 89:
			　　     num = '[OK]';
			  　　   break
			　　   case 90:
			　　     num = '[爱情]';
			  　　   break
			　　   case 91:
			　　     num = '[飞吻]';
			  　　   break
			　　   case 92:
			　　     num = '[跳跳]';
			  　　   break
			　　   case 93:
			　　     num = '[发抖]';
			  　　   break
			　　   case 94:
			　　     num = '[怄火]';
			  　　   break
			　　   case 95:
			　　     num = '[转圈]';
			  　　   break
			　　   case 96:
			　　     num = '[磕头]';
			  　　   break
			　　   case 97:
			　　     num = '[回头]';
			  　　   break
			　　   case 98:
			　　     num = '[跳绳]';
			  　　   break
			　　   case 99:
			　　     num = '[挥手]';
			  　　   break
			　　   case 100:
			　　     num = '[激动]';
			  　　   break
			　　   case 101:
			　　     num = '[街舞]';
			  　　   break
			　　   case 102:
			　　     num = '[献吻]';
			  　　   break
			　　   case 103:
			　　     num = '[左太极]';
			  　　   break
			　　   case 104:
			　　     num = '[右太极]';
			  　　   break
			 　　  default:
			   　　  
			　　}
				//将表情改为微信的格式 end
				self.insertHtml(num + '').hideMenu().focus();
				e.stop();
			});
		}
		function createEmoticonsTable(pageNum, parentDiv) {
			var table = document.createElement('table');
			parentDiv.append(table);
			if (previewDiv) {
				K(table).mouseover(function() {
					previewDiv.show('block');
				});
				K(table).mouseout(function() {
					previewDiv.hide();
				});
				elements.push(K(table));
			}
			table.className = 'ke-table';
			table.cellPadding = 0;
			table.cellSpacing = 0;
			table.border = 0;
			var num = (pageNum - 1) * cells + startNum;
			for (var i = 0; i < rows; i++) {
				var row = table.insertRow(i);
				for (var j = 0; j < cols; j++) {
					var cell = K(row.insertCell(j));
					cell.addClass('ke-cell');
					bindCellEvent(cell, j, num);
					var span = K('<span class="ke-img"></span>')
						.css('background-position', '-' + (24 * num) + 'px 0px')
						.css('background-image', 'url(' + path + 'static.gif)');
					cell.append(span);
					elements.push(cell);
					num++;
				}
			}
			return table;
		}
		var table = createEmoticonsTable(currentPageNum, wrapperDiv);
		function removeEvent() {
			K.each(elements, function() {
				this.unbind();
			});
		}
		var pageDiv;
		function bindPageEvent(el, pageNum) {
			el.click(function(e) {
				removeEvent();
				table.parentNode.removeChild(table);
				pageDiv.remove();
				table = createEmoticonsTable(pageNum, wrapperDiv);
				createPageTable(pageNum);
				currentPageNum = pageNum;
				e.stop();
			});
		}
		function createPageTable(currentPageNum) {
			pageDiv = K('<div class="ke-page"></div>');
			wrapperDiv.append(pageDiv);
			for (var pageNum = 1; pageNum <= pages; pageNum++) {
				if (currentPageNum !== pageNum) {
					var a = K('<a href="javascript:;">[' + pageNum + ']</a>');
					bindPageEvent(a, pageNum);
					pageDiv.append(a);
					elements.push(a);
				} else {
					pageDiv.append(K('@[' + pageNum + ']'));
				}
				pageDiv.append(K('@&nbsp;'));
			}
		}
		createPageTable(currentPageNum);
	});
});
